package com.itheima.d3_collection_list;

import java.util.ArrayList;
import java.util.List;

/**
      目标：掌握List系列集合的特点，以及其提供的特有方法。
 List是一个泛型接口，list系列集合特点:   有序，可重复，有索引，有两个实现类，这两个实现类的（底层实现不同，所以适合的场景不同）
 ArrayList：有序，可重复，有索引。
 LinkedList：有序，可重复，有索引。

 */
public class ListTest1 {
    public static void main(String[] args) {
        // 1.创建一个ArrayList集合对象（有序、可重复、有索引）
        //List<String> s = new List();  list是个接口没有对象，所以要用他的实现类arraylist
        /*
        简单看看源码：public class ArrayList<E> extends AbstractList<E>
        public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E>
        public interface List<E> extends Collection<E>
         */
        List<String> list = new ArrayList<>();  // 一行经典代码，多态写法，把arraylist对象给到其接口来记住
        list.add("蜘蛛精");
        list.add("至尊宝");
        list.add("至尊宝");
        list.add("牛夫人");
        System.out.println(list.toString()); // [蜘蛛精, 至尊宝, 至尊宝, 牛夫人]
        //list.add(7,"会不会索引越界");    报错：IndexOutOfBoundsException

        // 2.public void add(int index, E element): 在某个索引位置插入元素。
        list.add(2, "紫霞仙子");
        System.out.println("添加之后： "+list);

        // 3.public E remove(int index): 根据索引删除元素,返回被删除元素
        System.out.println("返回删除的元素： "+list.remove(2));
        System.out.println("删除之后： "+list);

        // 4.public E get(int index): 返回集合中指定位置的元素。
        //System.out.println(list.get(4));  报错：IndexOutOfBoundsException
        System.out.println(list.get(2));

        // 5.public E set(int index, E element): 修改索引位置处的元素,修改成功后，会返回原来的数据
        System.out.println("返回被修改索引处的元素初始值： "+list.set(3, "牛魔王"));
        System.out.println(list);

        list.set(2,"曾季洪牛逼");
        System.out.println(list.toString());
    }
}
